//
//  HMStatusViewModel.swift
//  MyWeibo
//
//  Created by apple on 16/4/21.
//  Copyright © 2016年 apple. All rights reserved.
//  --> HMStatuCell 专门为 cell 服务 处理数据逻辑

import UIKit
import SDWebImage

class HMStatusViewModel: NSObject {
    
    //当前视图模型里面保存的模型
    var status:HMStatus?{
        
        //在已经赋值好的视图模型里面设置
        didSet{
            
            //设置会员图标
            dealMemberImage()
            //设置微博来源
            dealSourceText()
            // 设置转发微博的内容
            if let s = status?.retweeted_status{
                
                if let name = s.user?.name,content = s.text{
                    
                    retweetText = "@\(name):\(content)"
                    
                }
            }
            // 计算配图视图的大小
            retweetPictureViewSize = calcPictureSize(status?.retweeted_status?.pic_urls)
            
            originalPictureViewSize = calcPictureSize(status?.pic_urls)
            // 处理时间
            createDate = self.sinaDate(status?.created_at)

        }
    }
    
    // 当前微博用户的会员图标
    var memberImage: UIImage?
    // 转发微博的内容
    var retweetText: String?
    
    // 来源字符串
    var sourceText: String?
    
    // 距离当前时间的微博创建时间（xx分钟前 ）
    var createAtText: String? {
        
        return dealCreateAtText(createDate ?? NSDate())
    }

     private var createDate: NSDate?
    
    // 转发微博的配图视图大小
    var retweetPictureViewSize: CGSize = CGSizeZero
    var originalPictureViewSize: CGSize = CGSizeZero
    
    //更新配图视图大小
     func updateSingleImagePictureViewSize(){
        
        retweetPictureViewSize = calcSingleImageSize(status?.retweeted_status?.pic_urls)
        
        originalPictureViewSize = calcSingleImageSize(status?.pic_urls)
    }
    //-----------------------
    /// 通过一个创建时间的字符串格式化成 NSDate
    private func sinaDate(createAt: String?) -> NSDate? {
        
        // 时间字符串
        guard let create_at = createAt else {
            return nil
        }
        
        
        // 转成 NSDate   初始化时间格式化器
        let fm = NSDateFormatter()
        fm.locale = NSLocale(localeIdentifier: "en")
        fm.dateFormat = "EEE MMM dd HH:mm:ss z yyyy"
        let createDate = fm.dateFromString(create_at)!
        return createDate
    }
    
    // 处理时间的方法
    private func dealCreateAtText(createDate: NSDate) -> String {
                let fm = NSDateFormatter()
        
        fm.locale = NSLocale(localeIdentifier: "en")
        
        let calendar = NSCalendar.currentCalendar()
        
        // 与当前时间进行对比
        if isDateInThisYear(createDate) { // createDate是否是今年
            if calendar.isDateInToday(createDate) {// 是今天
                let currentDate = NSDate()
                // 求出当前时间与创建时间的差值（秒）
                let timeInterval = currentDate.timeIntervalSinceDate(createDate)
                
                if timeInterval < 60 {// 是否是1分钟之内
                    return "刚刚"
                }else if timeInterval < 3600 { // 是否是1小时之内
                    // xx 分钟前
                    return "\(Int(timeInterval) / 60)分钟前"
                }else{
                    // xx 小时前
                    return "\(Int(timeInterval) / 3600)小时前"
                }
            }else if calendar.isDateInYesterday(createDate) {//是昨天
                // 昨天 10:10
                fm.dateFormat = "昨天 HH:mm"
                return fm.stringFromDate(createDate)
            }else{
                // 其他 08-10 10:10
                fm.dateFormat = "MM-dd HH:mm"
                return fm.stringFromDate(createDate)
            }
        }else{
            //            createAtText = "不是今年"
            fm.dateFormat = "yyyy-MM-dd HH:mm"
            return fm.stringFromDate(createDate)
        }
    }
    /// 传入一个时间，与当前时间进行对比 ，返回是否是当前时间的年分
    private func isDateInThisYear(targetDate: NSDate) -> Bool {
        // 当前时间
        let currentDate = NSDate()
        
        let fm = NSDateFormatter()
        fm.dateFormat = "yyyy"
        // 取出两个时间的年份
        let targetYear = fm.stringFromDate(targetDate)
        let currentYear = fm.stringFromDate(currentDate)
        
        return targetYear == currentYear
    }
    
    //------------------------------
    //计算配图大小
    private func calcSingleImageSize(pic_urls:[HMStatusPhotoInfo]?)->CGSize{
        
        //取出地址
        guard let imageUrlString = pic_urls?.first?.thumbnail_pic else{
            
            return CGSizeZero
        }
        
        //根据取出来的地址从缓存里面取出图片
       if let image = SDWebImageManager.sharedManager().imageCache.imageFromMemoryCacheForKey(imageUrlString){
        
        //计算当前缩放比
        let scale = UIScreen.mainScreen().scale
        
        var size = CGSize(width: image.size.width * scale, height: image.size.height * scale)
        
        
        // 过窄处理
        // 如果宽度小于 50 ，把其图片宽度拉伸到50，高度等比例拉伸
        if size.width < 50 {
            
         //先计算出高度
        let height = 50 / size.width * size.height
        //拉伸宽度
        size.width = 50
        //等比例设置高度
            size.height = height > 100 ? 100 : height
            
        }
        return size
        
        }
        
        return CGSizeZero
    }
    
    //通过配图数据计算配图的大小
    private func calcPictureSize(pic_urls:[HMStatusPhotoInfo]?)->CGSize{
        
        //得到图片张数
        let count = pic_urls?.count ?? 0
        
        
        //如果没有
        if count == 0 {
            
            return CGSizeZero
        }
        
        // 计算列
        let col = count == 4 ? 2 :(count > 3 ? 3 : count)
        
        let row = (count - 1) / 3 + 1
        
        
        //计算每一个条目的宽高
        //间距
        let margin:CGFloat = 5
        //宽高
        let itemsHM = (SCREENW - 2 * margin - 2 * HMStatusCellMargin) / 3
        
        //计算宽度
        let width = CGFloat(col) * itemsHM + CGFloat(col - 1) * margin
        
        let height = CGFloat(row) * itemsHM + CGFloat(row - 1) * margin
        
        return CGSize(width: width, height: height)
    }
    
    
    private func dealSourceText(){
        // <a href=\"http://app.weibo.com/t/feed/5B6hUc\" rel=\"nofollow\">iPhone 6s Plus</a>  按照格式截取
        guard let s = status?.source else{
            return
        }
        
        if let startIndex = s.rangeOfString("\">")?.endIndex,endIndex = s.rangeOfString("</a")?.startIndex {
            let result = s.substringWithRange(startIndex..<endIndex)
            
            sourceText = "来自\(result)"
        }

    }
    private func dealMemberImage(){
        
        if let rank = status?.user?.mbrank where (rank > 0 && rank < 7 ){
            
            memberImage = UIImage(named: "common_icon_membership_level\(rank)")
            
        }
        
    }
    
}
